package com.scitc.pleasurevideo.data;

import android.content.Context;
import android.text.TextUtils;

import com.google.gson.Gson;
import com.scitc.pleasurevideo.helper.ThreadHelper;
import com.scitc.pleasurevideo.pojo.CachingTvVo;
import com.scitc.pleasurevideo.util.IdGeneratorUtil;
import com.scitc.pleasurevideo.x5webview.MyApplication;

import java.util.ArrayList;
import java.util.List;

import static com.scitc.pleasurevideo.data.ETMan.getPref;
import static com.scitc.pleasurevideo.data.ETMan.savePref;

public class CollectTvDataMan {

    private static CollectTvDataMan collectTvDataMan;

    private CollectTvDataMan() {
        super();
    }

    private List<String> collectIdArray = new ArrayList<>();
    private List<String> collectTvArray = new ArrayList<>();
    private List<CachingTvVo> cachingTvVos = new ArrayList<>();
    private Context mcontext;
    private String collectIdstr="collectTv_";
    private String collectIdArraystr="config_caching_collect_id";
    private String collectTvArraystr="config_caching_collect_tv";
    private String cachingTvVosstr="config_caching_collect_";

    public synchronized static CollectTvDataMan getCollectTvDataMan() {
        if (collectTvDataMan == null) {
            collectTvDataMan = new CollectTvDataMan();
        }
        collectTvDataMan.setContext();
        return collectTvDataMan;
    }
    private void setContext() {
        this.mcontext = MyApplication.getInstance();
    }

    /**
     * 保存收藏影视记录
     * @param cachingTvVo
     */
    public void saveCollectDataMan(CachingTvVo cachingTvVo){
        String json=new Gson().toJson(cachingTvVo);
        String id=IdGeneratorUtil.getIdString(collectIdstr);
        cachingTvVo.setId(id);
        saveId(id);
        saveTvArray(json,id);
        saveTvVo(cachingTvVo);
    }

    /**
     * 获取所有的收藏影视记录
     * @return
     */
    public List<CachingTvVo> getCachingTvVos(){
        getTvVo();
        return cachingTvVos;
    }

    /**
     * 删除影视记录
     * @param cachingTvVo
     */
    public void deleteCachingTvVo(CachingTvVo cachingTvVo){
        String json=new Gson().toJson(cachingTvVo);
        getTvArray();
        for(int i=0;i<collectTvArray.size();i++){
            if(collectTvArray.get(i).equals(json)){
                getIdArray();
                deleteCachingTvVo(collectIdArray.get(i));
                break;
            }
        }
    }

    /**
     * 删除所有记录
     */
    public void deleteAll(){
        deleteAllTvVo();
        deleteAllId();
    }

    /**
     * 删除影视记录
     * @param id
     */
    public void deleteCachingTvVo(String id){
        deleteTvVo(id);
        deleteTvArray(id);
        deleteId(id);
    }

    /**
     * 判断有没有影视记录
     * @param cachingTvVo
     * @return
     */
    public boolean isHave(CachingTvVo cachingTvVo){
        String json=new Gson().toJson(cachingTvVo);
        getTvArray();
        return collectTvArray.contains(json);
    }

    /**
     * 更新影视记录
     * @param oldData
     * @param newData
     */
    public void updateTvVo(CachingTvVo oldData,CachingTvVo newData){
        String json=new Gson().toJson(oldData);
        String id = null;
        getTvArray();
        for(int i=0;i<collectTvArray.size();i++){
            if(collectTvArray.get(i).equals(json)){
                getIdArray();
                id=collectIdArray.get(i);
                break;
            }
        }
        if(TextUtils.isEmpty(id)||id.length()<1){
            return;
        }
        newData.setId(id);
        saveTvVo(newData);
    }

    /**
     * 跑车影视记录
     * @param cachingTvVo
     */
    private void saveTvVo(CachingTvVo cachingTvVo){
        String json = ETMan.getMananger().getGson().toJson(cachingTvVo);
        savePref(mcontext, cachingTvVosstr + cachingTvVo.getId(), json);
    }

    /**
     * 初始化所有的影视记录
     */
    private void getTvVo(){
        getIdArray();
        cachingTvVos.clear();
        for(int i=0;i<collectIdArray.size();i++){
            String json = getPref(mcontext, cachingTvVosstr + collectIdArray.get(i), "[]");
            CachingTvVo news = new Gson().fromJson(json, CachingTvVo.class);
            cachingTvVos.add(news);
        }
    }

    /**
     * 删除所有影视记录
     */
    private void deleteAllTvVo(){
        getIdArray();
        for(int i=0;i<collectIdArray.size();i++){
            deleteTvVo(collectIdArray.get(i));
            deleteTvArray(collectIdArray.get(i));
        }
    }

    /**
     * 删除影视记录
     * @param id
     */
    private void deleteTvVo(String id){
        savePref(mcontext, cachingTvVosstr + id, "[]");
    }

    /**
     * 将单个影视转json存下来
     * @param json
     * @param id
     */
    private void saveTvArray(String json,String id){
        savePref(mcontext, collectTvArraystr + id, json);
    }

    /**
     * 初始化所有的转成json的影视记录
     */
    private void getTvArray(){
        getIdArray();
        collectTvArray.clear();
        for(int i=0;i<collectIdArray.size();i++){
            String json=ETMan.getPref(mcontext,collectTvArraystr+collectIdArray.get(i),"[]");
            collectTvArray.add(json);
        }
    }

    /**
     * 删除单个转成json的影视记录
     * @param id
     */
    private void deleteTvArray(String id){
        savePref(mcontext, collectTvArraystr + id, "[]");
    }

    /**
     * 保存影视id
     * @param id
     */
    private void saveId(String id){
        getIdArray();
        collectIdArray.add(id);
        String json=ETMan.getMananger().getGson().toJson(collectIdArray);
        ETMan.savePref(mcontext,collectIdArraystr,json);
    }

    /**
     * 获取影视id的array
     */
    private void getIdArray(){
        String json=ETMan.getPref(mcontext,collectIdArraystr,"[]");
        collectIdArray=ETMan.getMananger().getGson().fromJson(json,List.class);
    }

    /**
     * 删除一个影视id
     * @param id
     */
    private void deleteId(String id){
        getIdArray();
        collectTvArray.remove(id);
        String json=ETMan.getMananger().getGson().toJson(collectIdArray);
        ETMan.savePref(mcontext,collectIdArraystr,json);
    }

    /**
     * 删除所有的id
     */
    private void deleteAllId(){
        ETMan.savePref(mcontext,collectIdArraystr,"[]");
    }
}
